package com.ai.module.order.domain.vo;

import cn.hutool.core.date.DateUtil;
import com.ai.module.order.en.OrderStatus;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

/**
 * @author: heJinQin
 * @create: 2024-04-05 17:07
 * @description:
 **/


@Slf4j
@Data
public class WeChatPayStatus {

    /**
     * 商户订单号
     */
    private String orderId;

    /**
     * 微信支付系统生成的订单号
     */
    private String transactionId;

    /**
     * 交易状态
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销(付款码支付)
     * USERPAYING：用户支付中(付款码支付)
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     */
    private OrderStatus orderStatus;

    /**
     * 支付完成时间
     */
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime successTime;

    /**
     * 交易类型
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    private String tradeType;

    /**
     * 订单总金额
     */
    private double amount;


    public void setSuccessTime(String successTime) {
        if ("null".equalsIgnoreCase(successTime)) {
            return;
        }
        // Hutool工具包的方法，自动识别一些常用格式的日期字符串
        Date date = DateUtil.parse(successTime);

        Instant instant = date.toInstant();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        this.successTime = localDateTime;

    }
}

